package ai.people.platform.archives.service;

import ai.people.netmon.framework.domain.archives.request.InformationSearchRequest;
import ai.people.netmon.framework.domain.archives.vo.*;
import ai.people.netmon.framework.model.request.PageKeyWordsRequest;
import ai.people.netmon.framework.model.response.PageResponse;

import javax.websocket.Session;

/**
 * @author LiGuanNan
 * @date 2022/6/6 16:25
 */
public interface InformationSearchService {

    /**
     * 信息检索-同步多线程实现
     *
     * @param reqParam 要求参数
     * @return {@link PageResponse}<{@link InformationSearchRespListVO}>
     */
    PageResponse<InformationSearchRespListVO> search(InformationSearchRequest reqParam);

    /**
     * 信息检索-同步多线程实现-列表返回详情里的所有字段
     *
     * @param reqParam 要求参数
     * @return {@link PageResponse}<{@link InformationSearchRespListVO}>
     */
    PageResponse<InformationSearchRespListVO> searchV2(InformationSearchRequest reqParam);

    /**
     * 信息检索-异步websocket实现
     *
     * @param reqParam 要求参数
     * @return {@link PageResponse}<{@link InformationSearchRespListVO}>
     */
    Long wsSearch(InformationSearchRequest reqParam, String msgType, Session session);

    /**
     * 发起信息检索-异步+redis存储
     *
     * @param reqParam 要求参数
     * @return {@link PageResponse}<{@link InformationSearchRespListVO}>
     */
    Long startSearch(InformationSearchRequest reqParam);

    /**
     * 查询检索结果-异步+轮询
     * @param sid 搜索请求唯一标识
     * @return
     */
    InformationSearchProgressVO getSearchResult(Long sid);

    /**
     * 查看详情
     *
     * @param dataSource 数据源
     * @param dataId     数据标识
     * @return {@link InformationDetailRespVO}
     */
    InformationDetailRespVO detail(String dataSource, String dataId);

    /**
     * 查看详情-不需要消耗积分
     *
     * @param dataSource 数据源
     * @param dataId     数据标识
     * @return {@link InformationDetailRespVO}
     */
    InformationDetailRespVO detailWithoutScore(String dataSource, String dataId);

    /**
     * 行为历史
     *
     * @param reqParam 要求参数
     * @return {@link PageResponse}<{@link InformationBehaviorRespListVO}>
     */
    PageResponse<InformationBehaviorRespListVO> behaviorHistory(PageKeyWordsRequest reqParam);

    /**
     * 查看列表
     *
     * @param reqParam 要求参数
     * @return {@link PageResponse}<{@link InformationSearchRespListVO}>
     */
    PageResponse<InformationSearchRespListVO> viewedList(PageKeyWordsRequest reqParam);

    /**
     * 积分概述
     *
     * @return {@link InformationViewedOverviewRespVO}
     */
    InformationViewedOverviewRespVO scoreOverview();

    void setJxInformationSearchCache(String key, Integer searchType, String value);

}
